package learn.sort.selection;

import learn.CommUtil;

import java.util.Arrays;

/**
 * 选择排序
 */
public class SelectionSort {
    public static void main(String[] args) {
        int[] arr = CommUtil.arr(15);
        //int[] arr = {9, 8, 7, 6, 5};
        int[] old = Arrays.copyOf(arr, arr.length);
        CommUtil.printArray("原数组", arr);
        process(arr);
        CommUtil.printArray("排序后", arr);
        CommUtil.check(old, arr);
    }

    /**
     * 选择排序
     * 首先在未排序的序列中找到最小元素，存放到排序序列的起始位置。
     * 再从剩余未排序元素中继续寻找最小元素，然后放到已排序序列的末尾。
     * 重复第二步，直到所有元素均排序完毕。
     */
    public static void process(int[] arr) {
        //1.每循环一次,将一个数放入有序序列尾部
        for (int i = 0; i < arr.length - 1; i++) {
            int min = i;
            //2.在未排序序列中找最小数的index
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            //2.交换位置,放在有序序列尾部
            if (min != i) {
                CommUtil.swap(arr, i, min);
            }
        }


    }
}
